package cn.akwangl.design.pattern.behavioral.templatemethod.v1;

/**
 * 抽象模板类，负责给出一个算法的轮廓和骨架。它由一个模板方法和若干个基本方法构成。这些方法的定义如下。
 * <p>
 * ① 模板方法：定义了算法的骨架，按某种顺序调用其包含的基本方法。
 * <p>
 * ② 基本方法：是整个算法中的一个步骤，包含以下几种类型。
 * 抽象方法：在抽象类中声明，由具体子类实现。
 * 具体方法：在抽象类中已经实现，在具体子类中可以继承或重写它。
 * 钩子方法：在抽象类中已经实现，包括用于判断的逻辑方法和需要子类重写的空方法两种。
 *
 * @author youyongkun
 * @date 2021/12/7 11:07
 */
public abstract class AbstractClass {
    /**
     * 模板方法
     *
     * @author youyongkun
     * @date 2021/12/7 11:09
     */
    public void TemplateMethod() {
        SpecificMethod();
        abstractMethod1();
        abstractMethod2();
    }

    /**
     * 具体方法
     *
     * @author youyongkun
     * @date 2021/12/7 11:08
     */
    public void SpecificMethod() {
        System.out.println("抽象类中的具体方法被调用...");
    }

    /**
     * 抽象方法1
     *
     * @author youyongkun
     * @date 2021/12/7 11:08
     */
    public abstract void abstractMethod1();

    /**
     * 抽象方法2
     *
     * @author youyongkun
     * @date 2021/12/7 11:08
     */
    public abstract void abstractMethod2();
}
